package my.mark.mybaibaoxiang.juc.mianshi;

/**
 * @Description TODO 两个线程交替打印1-100的奇数和偶数。https://blog.csdn.net/bobo1356/article/details/103408137
问题：启动a、b两个线程，由这两个线程打印出1到100共一百个数字。

要求：
a线程打印1、3、5、7等奇数，b线程打印2、4、6、8等偶数。
依次串行打印，即打印完1之后，再打印2，然后是3、4、5…直到100，全部打印完成后，进程能正常结束。
解决思路
两个线程交替打印，就是要两个线程之间进行同步，走走停停。线程的同步可以使用Object类自带的wait和notify（或者notifyAll）方法实现。
每个线程都是执行完一次打印之后，唤醒另外一个线程，然后自己进入等待状态。
需要注意的是：
（1）线程的启动顺序，需要先启动一个线程进入等待状态；另一个线程后启动直接执行，执行完唤醒等待线程，自己进入等待。
（2）线程何时退出，等打印了100之后，就不需要再等待了，而是退出。

使用总结
wait()、notify()方法的相同点与区别：
相同点：
都是Object类提供的native方法。
都必须要在 同步方法或同步块synchronized中 调用。
被调用时，当前线程必须拥有该对象的锁。
不同点：
wait()被调用之后，当前线程立即释放锁，等待被唤醒，被唤醒之后，再次获得锁才能继续往下执行
notify()被调用之后，会唤醒 TODO 等待在该对象上面的一个线程，但是当前线程并不立即释放锁，而是在执行完synchronized块之后才会释放锁。
一句话总结：wait使当前线程停止运行，而notify使停止的线程继续运行。它们俩搭配使用，就可以实现进程的通知、等待（或者叫做同步，或者进程的走走停停）。
 * @author wxming.
 * @date 2020-8-28.
 */
public class ThreadJiaoHu {
}
